package emergency;

public abstract class State {
	
	/**
	 * Abstract method for cancelling the given emergency
	 * 
	 * @param e
	 *            , the emergency you want to cancel
	 * 
	 * @throws IllegalStateException
	 *             , if canceling the given emergency isn't possible in the
	 *             concrete state
	 */
	public abstract void cancel(Emergency e) throws IllegalStateException;

	/**
	 * Abstract method for completing the given emergency
	 * 
	 * @param e
	 *            , the emergency you want to complete
	 * 
	 * @throws IllegalStateException
	 *             , if completing the given emergency isn't possible in the
	 *             concrete state
	 */
	public abstract void complete(Emergency e) throws IllegalStateException;

	/**
	 * Abstract method for sending units to the given emergency
	 * 
	 * @param e
	 *            , the emergency you want to send the units to
	 * 
	 * @throws IllegalStateException
	 *             , if sending units isn't possible in the concrete state
	 */
	public abstract void sendUnits(Emergency e) throws IllegalStateException;

	/**
	 * Abstract method for getting a string representation of the concrete state
	 * 
	 * @return a string representation of the concrete state
	 */
	public abstract String toString();

}
